# 解决空字符串的bug

import platform  # 判断操作系统类型

import socket

# 1. 买手机
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 重复使用socket
phone.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

# 2. 绑定手机卡
phone.bind(("127.0.0.1", 8080))
# 3. 开机
phone.listen(5)  # 5代表最大挂起的连接数
# 4. 等待电话连接
print("starting...")

conn, client_addr = phone.accept()
print(f"client_addr: {client_addr}")

while True:  # 通信循环
    if "linux" == platform.system():
        # 5. 收发消息
        # 单位：byte、1024代表收到的最大字节数
        data = conn.recv(1024)  # 接收数据的最大数: 1024个字节
        # 客户端发送空字符串
        if not data:  # 针对linux系统，接收空字符串的处理方法
            break
        print(f"client data : {data.decode('utf-8')}")
        conn.send(data.encode("utf-8").upper())
    elif "Windows" == platform.system():
        try:  # 针对Windows系统，接收空字符串的处理方法
            data = conn.recv(1024)
            print(f"client data : {data.decode('utf-8')}")
            conn.send(data.encode("utf-8").upper())
        except ConnectionResetError:
            break
# 6. 挂电话
conn.close()

# 7. 关机
phone.close()
